iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0
Python

一起來用 Snakify 練練手系列 第 8

【一起來用 Snakify 練練手】Day8 Lesson 3 練習題參考解答-2

  • 分享至 

  • xImage
  •  

接下來的題目有的會和西洋棋相關
我先把相關題目列出來 所以順序有可能和網站不一樣

♟️首先讓我們來認識一下西洋棋♟️

西洋棋是一種兩人對弈的棋類遊戲,目標是將對方的國王置於無法移動的「將死」局面。以下介紹西洋棋的基本規則、棋盤佈局和各棋子的移動方式。

1. 棋盤佈局

西洋棋的棋盤是一個 8x8 的方格,共 64 個格子,格子交替呈現淺色與深色。每個玩家的棋子分為白色和黑色兩組,並且依照以下方式佈局:

  • 第一排(近己方):擺放由左至右的棋子順序為:城堡、騎士、象、皇后、國王、象、騎士、城堡。
  • 第二排:擺放全部的兵(Pawn)。

皇后應該放置在與己方棋色相同的格子上,即白皇后在白格,黑皇后在黑格。

2. 棋子的種類與移動方式

每個玩家共有 16 個棋子,包括 8 個兵和 8 個其他不同的棋子(國王、皇后、城堡、騎士、象)。不同棋子的移動方式如下:

2.1 國王(King)

  • 移動方式:國王每次只能在縱橫或斜方向上移動一格。
  • 特殊規則:國王不能移動到會被攻擊的位置(被將軍)。

2.2 皇后(Queen)

  • 移動方式:皇后是西洋棋中最強的棋子,可以在縱橫或斜方向上任意移動格數。

2.3 城堡(Rook)

  • 移動方式:城堡可以沿著縱或橫方向任意移動格數,但不能跨越其他棋子。

2.4 騎士(Knight)

  • 移動方式:騎士的移動方式較為特殊,它必須移動成「L」形,即先橫向或縱向移動兩格,再垂直移動一格。騎士是唯一可以跳過其他棋子的棋子。

2.5 象(Bishop)

  • 移動方式:象只能沿斜方向移動任意格數,而且必須保持在同一顏色的格子上(淺色象走淺色格子,深色象走深色格子)。

2.6 兵(Pawn)

  • 移動方式:兵只能向前移動,並且只能前進一格。但在首次移動時,兵可以選擇前進一格或兩格。
  • 攻擊方式:兵的攻擊方式與移動不同,它只能斜向前方攻擊敵方棋子。
  • 升變:當兵到達對方棋盤最底排時,可以升變為皇后、城堡、騎士或象(通常升變為皇后)。

3. 特殊規則

3.1 王車易位(Castling)

王車易位是一種特殊的移動方式,涉及國王和其中一個城堡。當國王與城堡之間的格子沒有其他棋子,且國王和城堡都未曾移動過,則可以進行王車易位。國王向城堡方向移動兩格,城堡跳過國王並放到國王剛移過的位置。

3.2 吃過路兵(En Passant)

當對方的兵從起始位置一次前進兩格,而此過程中經過了己方兵的攻擊範圍,則己方的兵可以選擇在下一回合將該兵「吃掉」。這個操作只能在該局面發生後立即執行。

4. 棋局結束條件

4.1 將死(Checkmate)

當國王被將軍且無法擺脫將軍狀態時,這稱為「將死」,對方獲勝。

4.2 和局(Draw)

有幾種情況下會形成和局:

  • 雙方都無法將對方國王將死。
  • 50 步內無棋子被吃且無兵移動。
  • 任何一方無法進行合法移動且未被將軍(稱為「困死」)。

題目

  • Rook move
    判斷給定的兩個位置是否可以成功移動
a = int(input())
b = int(input())
c = int(input())
d = int(input())

if a==c or b==d:
    print('YES')
else:
    print('NO')
  • Chess board - black square
    ✨ 試著觀察黑色跟白色的xy座標
c = int(input())
r = int(input())

if r % 2 == c % 2:
    print('BLACK')
else:
    print('WHITE')
  • Chess board - same color
    ✨ 試著觀察黑色跟白色的xy座標
x1 = int(input())
y1 = int(input())
x2 = int(input())
y2 = int(input())
if (x1 + y1 + x2 + y2) % 2 == 0:
    print('YES')
else:
    print('NO')
  • King move
a = int(input())
b = int(input())
c = int(input())
d = int(input())

if abs(c-a) <=1 and abs(d-b) <=1:
    print('YES')
else:
    print('NO')
  • Bishop moves
a = int(input())
b = int(input())
c = int(input())
d = int(input())

if abs(c-a) == abs(d-b):
    print('YES')
else:
    print('NO')
  • Queen move
a = int(input())
b = int(input())
c = int(input())
d = int(input())

if abs(c-a) == abs(d-b) or abs(c-a)==0 or abs(d-b)==0:
    print('YES')
else:
    print('NO')
  • Knight move
a = int(input())
b = int(input())
c = int(input())
d = int(input())

if abs(c-a)==1 and abs(d-b)==2 or abs(c-a)==2 and abs(d-b)==1:
    print('YES')
else:
    print('NO')
  • White pawn move
a = int(input())
b = int(input())
c = int(input())
d = int(input())

if (b==1):
    print('NO')
elif (a==c and d-b==1):
    print('YES')
elif (b==2 and a==c and d-b==2):
    print('YES')
elif (c-a==1 and d-b==1) or (a-c==1 and d-b==1):
    print('YES')
else:
    print('NO')

上一篇
【一起來用 Snakify 練練手】Day7 Lesson 3 練習題參考解答-1
下一篇
【一起來用 Snakify 練練手】Day9 Lesson 3 練習題參考解答-3
系列文
一起來用 Snakify 練練手21
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言